{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### DQN流程整理\n",
    "\n",
    "DQN算法更新的本质是**利用包含部分真实值的预测值R+gamma*maxQ'(s',a')来更新纯粹的预测值Q(s,a)**，和Q学习的区别是使用了深度网络来拟合Q值。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 通过DQN代码对深度强化学习实验复现的总结\n",
    "\n",
    "1. 区分**智能体**和**环境**。智能体的组成包括深度模型、算法实现以及相关的数据结构，实验过程通过训练函数将智能体和环境联系在一起。\n",
    "2. 复现算法时按照论文伪代码一步一步实现，区分出哪些部分由智能体实现，例如update函数，哪些部分需要与环境交互实现。\n",
    "3. 确定算法流程后，需要确定每个函数所涉及到的数据结构类型、数据的维度。例如在DQN实验中：\n",
    "   \n",
    "   (1).**深度网络的输入是什么类型**，维度是什么；输出是什么类型，维度是什么\n",
    "\n",
    "   (2).数据如何以向量化的形式参与运算，如何得到输出结果的向量化形式(即多维矩阵而不是一维矩阵)\n",
    "\n",
    "   (3).**确定好哪些数据参与损失函数的运算，它们的维度是什么**\n",
    "   \n",
    "   (4).哪些张量参与求梯度，哪些张量当作标量对待\n",
    "\n",
    "   (5).需要哪些数据结构参与算法，例如经验回放是什么数据结构，单笔经验是什么数据结构\n",
    "4. 当算法核心内容实现完毕后，再实现训练和测试函数，将智能体和环境结合起来。\n",
    "\n",
    "下图红色方框展示了算法中智能体的执行步骤，黑色展示了算法中智能体需要和环境交互执行的步骤。"
   ]
  }
 ],
 "metadata": {
  "language_info": {
   "name": "python"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
